namespace ManagedFreeFrame
{
    using ManagedFreeFrame.Enum;

    // ReSharper disable MemberCanBeInternal
    // ReSharper disable UnusedAutoPropertyAccessor.Global
    public sealed class Parameter
    {
        /// <summary>
        /// Gets or sets the name.
        /// The name of the Parameter as it will be displayed by the host on the UI.
        ///  (array of 16 1-byte ASCII characters, *not null terminated*)
        /// </summary>
        /// <value>The name.</value>
        public string Name { get; set; }

        /// <summary>
        /// String representing the current display value of this parameter. 
        /// The plugin can display whatever it likes here e.g. 
        /// just the float,
        /// a rounded 0-100 '%' representation for the user, 
        /// words representing states like 'on' / 'off', 
        /// different effects that the one plugin can do 
        /// etc...
        /// </summary>
        /// <value>The parameter display.</value>
        public string ParameterDisplay { get; set; }

        /// <summary>
        /// Gets or sets the value.
        /// Float value from 0-1 or pointer to null terminated string.
        /// (32-bit float value OR 32-bit pointer) 
        /// </summary>
        /// <value>The value.</value>
        /// <remarks>
        /// Apart from text parameters, FreeFrame parameter values are always 32-bit floats, 
        /// and the range of values permitted is STRICTLY between or equalt to 0-1. 
        /// This allows faster processing and a good range of values over a standard range, 
        /// so the host can run up sliders or similar for the plugin. 
        /// The Use of any values outside this range will result in hideous incompatibilities. 
        /// The  ParameterDisplayValue can be used to display whatever actual values the plugin likes e.g. 0-255, 0-767, 1-256 or whatever. 
        /// The plugin should translate the standard 0-1 float range into the values it needs for its processing. 
        /// For text parameters, this 32-bit value represents a pointer to a null terminated string. 
        /// </remarks>
        public float Value { get; set; }

        /// <summary>
        /// The initial default value for this parameter. 32-bit float value or 32-bit pointer to null terminated string.
        /// </summary>
        /// <remarks>
        /// Plugins should always specify default values. 
        /// Sometimes a host may not implement all parameters on a plugin, 
        /// so the plugin must use default values until told to do otherwise by the host.
        /// Apart from text parameters, FreeFrame parameter values are always 32-bit floats, 
        /// and the range of values permitted is STRICTLY 0-1. 
        /// For text parameters, this 32-bit value represents a pointer to a null terminated string. 
        /// </remarks>
        /// <value>The default value.</value>
        public float DefaultValue { get; set; }


        /// <summary>
        ///  32-bit unsigned integer. Tells the host what kind of data the parameter is. 
        /// </summary>
        /// <remarks>
        /// The range of values permitted for all variables (except text) is strictly 0-1. 
        /// This also holds for xpos/ypos variables
        /// (where, for example, xpos=0 corresponds to a screen x-coordinate of 0, 
        /// and xpos=1 corresponds to an actual x-coordinate of FrameWidth-1. 
        /// See VideoInfoStruct). 
        /// </remarks>
        /// <value>The type of the parameter.</value>
        public ParameterType ParameterType { get; set; }

    }
    // ReSharper restore MemberCanBeInternal
    // ReSharper restore UnusedAutoPropertyAccessor.Global
}